FreeCAD kann SVG-Dokumente importieren und exportieren, die Code enthalten, der zu einem bestimmten Namensraum gehört, der eine Untermenge der XML-Befehle ist.
Wie alle XML-Dokumente enthält auch ein SVG-Dokument zwei Abschnitte:
<svg>
-Tags (Markierungen) ein.
Der von FreeCAD verwendete Standard-SVG-Namensraum wird mit dieser Zeile angegeben:
xmlns="http://www.w3.org/2000/svg" version="1.1"
Die externe Verknüpfung verweist auf eine Webseite, die Informationen über den Namensraum und den zugehörigen Befehlen enthält. Attribute dieses Namensraumes werden ohne Präfix verwendet.
Attribute die im SVG-Namensraum (namespace) fehlen, können als Namensraum-Erweiterungen hinzugefügt werden. FreeCAD verwendet solche Erweiterungen für Zeichnungsvorlagen. Die dazugehörige Namensraum-Angabe, die verwendet wird, um das Präfix freecad:
einzuführen, verweist auf diese Seite:
xmlns:freecad="http://www.freecad.org/wiki/index.php?title=Svg_Namespace"
Die Verknüpfung wird nicht zum Abrufen von Informationen oder Werten zur Laufzeit verwendet, sondern als ein Schlüssel zum Aktivieren der speziellen Attribute.
Der Arbeitsbereich TechDraw verwendet SVG-Vorlagen zum Erstellen von Zeichnungen. Er kann keine Vorlagen erstellen und exportieren, benötigt aber extern erstellte Vorlagen mit manuell eingefügten Attributen:
Zeichnungselemente (symbols) sind eine weitere Art der SVG-Dateien, die in Zeichnungen verwendet werden können, z.B. als stempelartige Beschriftungen. Sie müssen ebenfalls extern erstellt werden und können auch die oben genannten Attribute verwenden.
Vor dem Umzug des FreeCAD-Wikis, inklusive dieser Seite, von freecadweb.org nach freecad.org in der Version 0.21 hieß die Verknüpfung zu dieser Seite :
xmlns:freecad="http://www.freecadweb.org/wiki/index.php?title=Svg_Namespace"
Aktualisierte TechDraw-Vorlagen enthalten jetzt einen Schlüssel, der die speziellen Attribute nicht aktivieren kann, wenn sie mit FreeCAD Version 0.20 und darunter verwendet werden; als Ergebnis werden die editierbaren Texte der aktuellen Vorlagen nicht erkannt und daher als einfache Texte behandelt.
Es scheint so, als könne die Version 0.21 und darüber mit beiden verknüpften Adressen umgehen.
TechDraw-Vorlagen sind SVG-Dateien, die eingesetzt werden, um die Grundstruktur einer technische Zeichnungen in FreeCAD bereitzustellen, während Symbole grafische Beschriftungselemente hinzufügen.
Das SVG-Format ist eine Untermenge des XML-Formats. Deshalb besteht eine SVG-Datei, wie jede XML-Datei, aus zwei Teilen:
Der Kopf besteht aus nur einer Zeile zur Angabe der Version der XML-Sprache, die verwendet werden soll, um die im Körper befindlichen Anweisungen zu verarbeiten.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Der Körper einer SVG-Datei beginnt mit einem öffnenden <svg>
-Tag, das Informationen zu Namensräumen enthält sowie zur Größe der Vorlage und wo sie platziert wird. Am Ende befindet sich ein schließender </svg>
-Tag. Alle Anweisungen zum Erstellen und Bearbeiten von Geometrie- und Textelementen werden zwischen den beiden Tags eingefügt.
<svg
xmlns="http://www.w3.org/2000/svg" version="1.1"
width="420mm"
height="297mm"
viewBox="0 0 420 297">
</svg>
Die Tags können Attribute enthalten, die die Elemente zwischen den öffnenden und schließenden Tags steuern:
Die Kombination von width
, height
und viewBox
legt 1 SVG-Einheit = 1 mm für das gesamte Dokument fest, um maßstabsgetreues Drucken zu ermöglichen, d.h. alle Abmessungen in SVG-Einheiten werden als Millimeter angesehen und die Angabe einer Maßeinheit kann ab diesem Punkt entfallen. (Die Beispielwerte legen die Fläche eines A3-Blattes im Querformat fest)
Zum Aktivieren der Namensraum-Erweiterung muss der Namensraum-Deklaration zu den Attributen des öffnenden <svg>
-Tags hinzugefügt werden. Dies ergibt eine Grundstruktur für eine Vorlagendatei, ein leeres A3-Blatt im Querformat, das für freecad:
-Attribute vorbereitet ist:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:freecad="http://www.freecad.org/wiki/index.php?title=Svg_Namespace"
width="420mm"
height="297mm"
viewBox="0 0 420 297">
</svg>
Mit aktiviertem FreeCAD-Namensraum können jetzt folgende freecad:
-Attribute in den öffnenden <text>
-Tags im SVG-Dokument eingesetzt werden:
Das Attribut freecad:editable wird eingesetzt, um bearbeitbare Texte in SVG-Dateien zu kennzeichnen. Der Wert dieses Attributs kann geändert werden:
Vorgabetexte müssen mit tspan-Tags eingerahmt werden, andernfalls wird der in den Vorlagen/Symbolen angezeigte Text nicht mit geänderten variablen Inhalten synchronisiert.
Beispiel:
<text freecad:editable="MyTitleText">
<tspan>This is a title</tspan>
</text>
eingeführt mit Version 1.0: Kennzeichnet einen bearbeitbaren Text in einer Vorlage für automatisches Ausfüllen, wenn eine Vorlage eingefügt wird. (Dies wird einem vorhandenen Attribut freecad:editable hinzugefügt)
Beispiel:
<text freecad:editable="MyTitleText"; freecad:autofill="AutofillElement" >
<tspan>This is a title</tspan>
</text>
Die folgenden "AutofillElements" sind bisher implementiertyet:
Die obigen Beispiele sind nicht komplett, da ihr Fokus nur auf den freecad:
-Attributen liegt, aber Text braucht mehr Angaben, um an der gewünschten Stelle in einem bestimmten Stil und wahlweise gedreht dargestellt zu werden.
Attribute können weggelassen werden; dadurch werden Standardwerte verwendet. Dies verbessert die Lesbarkeit und ergibt eine ziemlich kurze und einfach zu wartende Datei.
Jede Text-Zeichenfolge wird zwischen <text>
- und </text>
-Tags eingebettet. Ein bearbeitbarer Text muss außerdem zwischen <tspan>
- und </tspan>
-Tags eingebettet werden, andernfalls wird er sich nicht bearbeitetn lassen.
Texte werden normalerweise bei 0;0
eingefügt. Um den Text an der gewünschten Stelle zu positionieren, werden die Koordinaten des Ankerpunktes x
und y
in den <text>
-Tag eingefügt. Nicht vergessen, dass die Y-Richtung in SVG-Dateien nach unten verläuft.
Es wird empfohlen, Texte, die mehrere gemeinsame Eigenschaften besitzen, zu gruppieren (d.h. Text zwischen <g>
und </g>
-Tags einzubetten). Auf diese Weise können gemeinsame Attribute im Gruppen-Tag <g>
festgelegt werden, während individuelle Attribute im <text>
-Tag festgelegt werden. Eingebettete Text-Attribute überschreiben umgebende Gruppen-Attributte.
Beispiel:
<g id="text-non-editable"
font-family="osifont"
font-size="10"
text-anchor="start">
<text x="10" y="20">A simple text</text>
<text x="10" y="40" font-color:"blue">another simple text</text>
</g>
In diesem Beispiel werden beide gruppierte Texte in der Schriftart osifont mit 10 mm Schrifthöhe dargestellt und mit ihren Ankerpunkten am ersten Zeichen. Der erste wird schwarz eingefärbt (Standardfarbe), der zweite blau.
<g id="text-editable"
style="font-family:osifont; font-size:15; text-anchor:start; fill:blue">
<text freecad:editable="Text1" x="50" y="40"> <tspan>Editable text in blue</tspan>. </text>
<text freecad:editable="Text2" x="50" y="60" fill="red" text-anchor="middle">
<tspan>Centered editable text in red</tspan>
</text>
<text freecad:editable="Text3" x="50" y="80" transform="rotate(90,50,80)>
<tspan>Rotated editable text in blue</tspan>
</text>
</g>
In Diesem Beispiel werden alle drei gruppierten bearbeitbaren Texte in der Schriftart osifont mit 15 mm Schrifthöhe blau dargestellt und mit ihren Ankerpunkten am ersten Zeichen. Text2 hat die abweichende Farbe Rot und den Ankerpunkt in der Mitte, Text3 ist um 90° im Uhrzeigersinn gedreht, wobei sich Drehpunkt und Ankerpunkt an derselben Stelle befinden.
die Beispiele verwenden zwei unterschiedliche Arten die Eigenschaften der Schrift festzulegen; separate Attribute im ersten und in einem einzigen Style-Attribut kombiniert im zweiten Beispiel.
Es wird empfohlen das ID-Attribut im Gruppen-Tag dafür einzusetzen, die Art der Elemente zu beschreiben, die gruppiert werden.
Transform-Attribute funktionieren mit allen Texten, aber bearbeitbare Texte verlieren die Verbindung zu Bearbeitungsmarken (standardmäßig blaue Unterstriche), da diese der Bewegung des Textes nicht folgen. Daher können einfache Texte mit Schriftfeld-Geometrie gruppiert werden und mit einer einzigen Verschiebung bewegt werden, aber bearbeitbare Texte müssen einzeln positioniert werden. Drehungen mit deckungsgleichen Anker- und Drehpunkten können, im Gegensatz zu anderen Transformationen, sicher in <text>
-Tags eigesetzt werden, da Text und Bearbeitungsmarke sich dann nicht auseinanderbewegen.
<g
id="g3587">
<text
sodipodi:linespacing="119.00001%"
id="text3482"
y="229.10912"
x="220.8476"
style="font-size:1.97555566px;font-style:normal;font-weight:normal;line-height:119.00000572%;letter-spacing:0.01975556px;word-spacing:0.00846667px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
xml:space="preserve"><tspan
y="229.10912"
x="220.8476"
id="tspan3484"
sodipodi:role="line">AUTHOR NAME :</tspan></text>
<g
style="fill:none;stroke:#000000;stroke-width:0.13;stroke-linecap:butt;stroke-linejoin:miter"
id="g578-7"
transform="translate(0,4)">
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans;-inkscape-font-specification:sans"
x="220.9935"
y="228.95425"
id="text3331"
sodipodi:linespacing="125%"
freecad:editable="AuthorName"><tspan
sodipodi:role="line"
id="tspan3333"
x="220.9935"
y="228.95425">AUTHOR NAME</tspan></text>
<text
...
...
...
... </text>
</g>
<g
Beginn der Gruppierung
style="fill:none;stroke:#000000;stroke-width:0.13;stroke-linecap:butt;stroke-linejoin:miter"
id="g578-7"
transform="translate(0,4)">
Zur Gruppierung gehörige Daten
<text
Beginn des Textblockes
xml:space="preserve"
style="font-size:4px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans;-inkscape-font-specification:sans"
Alle Informationen über den Text, der angezeigt wird (Textattribute)
x="220.9935"
y="228.95425"
id="text3331"
sodipodi:linespacing="125%"
Koordinaten des Textes (wo dieser angezeigt wird) und eine Benennung (ID)
freecad:editable="AuthorName"><tspan
Hier ist AuthorName die Variable, die durch freecad:editable verwaltet wird und die bearbeitbare Zeichenkette (string) speichert, die angezeigt wird.
sodipodi:role="line"
id="tspan3333"
x="220.9935"
y="228.95425">AUTHOR NAME</tspan></text>
Koordinaten und Benennung (ID) des Textes, der als Vorgabe angezeigt wird. </text> schließt den text-Block.
<text
...
...
...
... </text>
</g>
Weitere text-Blöcke und das End-Tag </g> der Gruppierung der text-Blöcke.
Es ist möglich, dass nach dem Bearbeiten der Inkscape-SVG-Datei die Datei nicht mehr funktioniert. Möglicherweise sind Informationen verlorengegangen.
Dann muss geprüft werden, ob der bearbeitbare Text geändert wurde.
Beispiel: